Question 1
What do you understand about Requirements Engineering?
Requirements Engineering (RE) is the process of eliciting, analyzing, documenting, and
managing the requirements of a software system. It involves understanding and defining
what a software system should do and how it should behave to meet the needs of its
stakeholders.
In essence, Requirements Engineering aims to bridge the gap between the stakeholders'
needs and the actual software system to be developed. This involves:
1. Eliciting Requirements: Gathering requirements from stakeholders through
interviews, surveys, workshops, and other techniques to understand their needs,
expectations, and constraints.
2. Analyzing Requirements: Examining and refining gathered requirements to
ensure they are complete, consistent, feasible, and testable. This may involve
prioritizing requirements, resolving conflicts, and identifying dependencies.
3. Documenting Requirements: Recording requirements in a formal and structured
manner using documents, models, diagrams, or user stories. Documentation helps
communicate requirements effectively to all stakeholders and serves as a basis for
system design and development.
4. Managing Requirements: Controlling changes to requirements throughout the
software development lifecycle, tracking their evolution, and ensuring traceability
between requirements and other artifacts. Requirement management helps
maintain alignment between the evolving system and stakeholders' needs.
Question 2
Discuss in brief about the 4 high levels of RE sub processes
Requirements Engineering (RE) consists of four high-level subprocesses, each addressing
different aspects of managing requirements throughout the software development
lifecycle. These subprocesses are:
1. Elicitation:
Elicitation involves gathering requirements from stakeholders by engaging
in various communication activities such as interviews, workshops,
surveys, and observations.
The goal is to understand stakeholders' needs, expectations, and
constraints regarding the software system.
Techniques like brainstorming, use case analysis, and prototyping are
often used to elicit requirements effectively.
2. Analysis:
Analysis focuses on refining and understanding the elicited requirements
to ensure they are complete, consistent, feasible, and testable.
Requirements are analyzed to identify potential conflicts, ambiguities, or
missing details that need resolution.
Techniques such as requirements prioritization, validation, and
verification are applied during this phase to ensure the quality of the
requirements.
3. Specification:
Specification involves documenting the refined requirements in a
structured and formal manner using various artifacts such as requirement
documents, models, diagrams, or user stories.
The goal is to create a clear and unambiguous representation of the
requirements that can be easily understood by all stakeholders.
Specifications serve as a basis for system design, development, and testing
activities.
4. Validation:
Validation focuses on ensuring that the specified requirements meet the
stakeholders' needs and expectations.
Requirements are validated against predefined criteria to ensure they are
correct, complete, consistent, and relevant to the software system.
Techniques such as reviews, walkthroughs, and prototyping are used to
validate requirements with stakeholders and ensure their acceptance.
These four subprocesses are iterative and interrelated, meaning that activities in one
subprocess may influence activities in another.
Question 3
Why is it that many software developers don’t pay enough attention to requirements engineering?
Are there ever circumstances where you can skip it?
While there may be instances where certain RE activities can be streamlined or adapted,
completely skipping Requirements Engineering is risky and can lead to project failures or
costly rework in the long run. It's essential for developers to recognize the importance of
RE and allocate adequate time and resources to ensure that requirements are well-
understood, documented, and validated throughout the software development lifecycle.
Question 4
Discuss some problems that occur when requirements must be elicited from three or four different customers.
When requirements must be elicited from multiple customers, several challenges
and problems may arise:
1. Diverse Perspectives: Each customer may have different needs, priorities, and
perspectives on the desired system functionality. Balancing these diverse
viewpoints and integrating conflicting requirements can be challenging.
2. Communication Barriers: Communication breakdowns may occur due to
differences in language, terminology, or communication styles among customers.
Misinterpretation of requirements or incomplete information exchange can lead to
misunderstandings.
3. Resource Constraints: Limited resources, such as time, budget, and expertise,
may hinder the requirements elicitation process when dealing with multiple
customers. Adequate resources must be allocated to address the needs of all
stakeholders adequately.
Question 5
What is the purpose of domain analysis?
The purpose of domain analysis is to systematically study and understand a specific
problem domain or application area in order to identify commonalities, variability, and
reusable components. It aims to:
1. Gain Understanding: Domain analysis helps in comprehensively understanding
the characteristics, requirements, constraints, and terminology of a particular
domain.
2. Identify Commonalities: It identifies common features, functionalities, and
processes that exist across different systems within the same domain.
3. Capture Variability: Domain analysis also captures the variations and differences
that may exist among different instances or variations of systems within the
domain.
4. Facilitate Reusability: By identifying commonalities and variabilities, domain
analysis enables the development of reusable assets such as requirements, design
patterns, components, and architectures.
5. Reduce Development Time and Costs: Reusing domain-specific assets and
knowledge can significantly reduce development time and costs by leveraging
existing solutions and avoiding redundant efforts.
6. Ensure Consistency: It helps in ensuring consistency and coherence across
different systems or projects within the same domain by establishing standardized
practices, architectures, and design patterns.